import { defineStore } from "pinia";

const useCartStore = defineStore("cart", {
  state: () => ({
    items: [], // 购物车商品列表
  }),
  getters: {
    // 获取购物车商品总数
    getTotalItems() {
      return this.items.reduce((total, item) => total + item.quantity, 0);
    },
    // 获取购物车总金额
    getTotalPrice() {
      return this.items.reduce((total, item) => {
        return total + (item.product.price * item.quantity);
      }, 0);
    },
    // 获取购物车商品列表
    getCartItems() {
      return this.items;
    }
  },
  actions: {
    // 添加商品到购物车
    addToCart(product, quantity = 1) {
      // 检查商品是否已存在于购物车中
      const existingItem = this.items.find(item => item.product.id === product.id);
      
      if (existingItem) {
        // 如果商品已存在，增加数量
        existingItem.quantity += quantity;
      } else {
        // 如果商品不存在，添加新商品
        this.items.push({
          id: Date.now(), // 生成唯一ID
          productId: product.id,
          quantity: quantity,
          product: product
        });
      }
    },
    // 从购物车移除商品
    removeFromCart(itemId) {
      this.items = this.items.filter(item => item.id !== itemId);
    },
    // 更新商品数量
    updateQuantity(itemId, quantity) {
      const item = this.items.find(item => item.id === itemId);
      if (item) {
        item.quantity = quantity;
        // 如果数量小于等于0，移除商品
        if (item.quantity <= 0) {
          this.removeFromCart(itemId);
        }
      }
    },
    // 清空购物车
    clearCart() {
      this.items = [];
    }
  },
  // 持久化存储
  persist: {
    key: "cart", // 自定义存储键名
    storage: localStorage,
    paths: ["items"],
    beforeRestore: (ctx) => {
      console.log("即将恢复购物车存储", ctx);
    },
    afterRestore: (ctx) => {
      console.log("购物车存储恢复完成", ctx);
    },
  },
});

export default useCartStore;